package club.monkeywood.converter;

import org.springframework.http.MediaType;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;

import java.util.ArrayList;
import java.util.List;

public class WxMappingJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter {
    //RestTemplate 把数据从 HttpResponse 转换成 Object 的时候，找不到合适的 HttpMessageConverter 来转换
    // 默认构造的 MappingJackson2HttpMessageConverter 中的 supportedMediaTypes 只支持：application/json 的 MediaType
    //不推荐把 WxMappingJackson2HttpMessageConverter 实例当作构造 RestTemplate 时的参数来构造 RestTemplate，
    // 也不推荐 使用新的 WxMappingJackson2HttpMessageConverter 替换 RestTemplate 默认构造中创建的 MappingJackson2HttpMessageConverter 实例，
    // 因为这两种方式都会导致 Content-Type 为 application/json 的 Json 响应没有转换器来反序列化，所以最佳的方式还是“追加”
    //例如：
    //RestTemplate restTemplate = new RestTemplate();
    //restTemplate.getMessageConverters().add(new WxMappingJackson2HttpMessageConverter());
    //UserInfo userInfo = restTemplate.getForObject(url, UserInfo.class);
    //详情见： https://blog.csdn.net/kinginblue/article/details/52706155
    public WxMappingJackson2HttpMessageConverter(){
        List<MediaType> mediaTypes = new ArrayList<>();
        //加入text/plain类型的支持，否则接收微信返回无法反序列化为json
        mediaTypes.add(MediaType.TEXT_PLAIN);
        //加入text/html类型的支持，否则接收微信返回无法反序列化为json
        mediaTypes.add(MediaType.TEXT_HTML);
        setSupportedMediaTypes(mediaTypes);
    }
}
